// 每秒钟将页面刷新出来
const AC_GAME_OBJECTS = [];

export class AcGameObject {
    constructor() {
        AC_GAME_OBJECTS.push(this);
        this.timedelta = 0; // 当前帧距离上一帧的时间间隔，用来计算速度
        this.has_called_start = false; // 是否开始执行过
    }

    start() { // 创建该类时只执行一次

    }

    update() { // 除第一帧之外每一帧执行一次
        
    }

    on_destroy() { // 删除之前执行

    }

    destory() { // 删除对象
        this.on_destroy();
        for (let i in AC_GAME_OBJECTS) {
            let obj = AC_GAME_OBJECTS[i];
            if (obj == this) {
                AC_GAME_OBJECTS.splice(i);
                break;
            }
        }
    }
}

let last_timestamp = 0; // 上一次执行的时刻

const step = (timestamp) => { // timestamp当前执行的时刻
    for (let obj of AC_GAME_OBJECTS) {
        if (!obj.has_called_start) {
            obj.has_called_start = true;
            obj.start();
        } else {
            obj.timedelta = timestamp - last_timestamp;
            obj.update();
        }
    }

    last_timestamp = timestamp;
    requestAnimationFrame(step)
}

// 此函数的作用请求游览器在下一帧执行step函数
requestAnimationFrame(step)